#ifndef __VISUAL_MARKER_H__
#define __VISUAL_MARKER_H__

#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include <visualization_msgs/MarkerArray.h>

// aoting@ubuntu:~/hrg_bee_dev_v3$ rosmsg show visualization_msgs/Marker
// uint8 ARROW=0
// uint8 CUBE=1
// uint8 SPHERE=2
// uint8 CYLINDER=3
// uint8 LINE_STRIP=4
// uint8 LINE_LIST=5
// uint8 CUBE_LIST=6
// uint8 SPHERE_LIST=7
// uint8 POINTS=8
// uint8 TEXT_VIEW_FACING=9
// uint8 MESH_RESOURCE=10
// uint8 TRIANGLE_LIST=11
// uint8 ADD=0
// uint8 MODIFY=0
// uint8 DELETE=2
// uint8 DELETEALL=3
// std_msgs/Header header
//   uint32 seq
//   time stamp
//   string frame_id
// string ns
// int32 id
// int32 type
// int32 action
// geometry_msgs/Pose pose
//   geometry_msgs/Point position
//     float64 x
//     float64 y
//     float64 z
//   geometry_msgs/Quaternion orientation
//     float64 x
//     float64 y
//     float64 z
//     float64 w
// geometry_msgs/Vector3 scale
//   float64 x
//   float64 y
//   float64 z
// std_msgs/ColorRGBA color
//   float32 r
//   float32 g
//   float32 b
//   float32 a
// duration lifetime
// bool frame_locked
// geometry_msgs/Point[] points
//   float64 x
//   float64 y
//   float64 z
// std_msgs/ColorRGBA[] colors
//   float32 r
//   float32 g
//   float32 b
//   float32 a
// string text
// string mesh_resource
// bool mesh_use_embedded_materials

// aoting@ubuntu:~/hrg_bee_dev_v3$ rosmsg show visualization_msgs/MarkerArray 
// visualization_msgs/Marker[] markers
//   uint8 ARROW=0
//   ......

// https://wiki.ros.org/rviz/DisplayTypes/Marker#Line_List_.28LINE_LIST.3D5.29
//
#include<locale>
using namespace std;

class VisualMarker{
    public:
        VisualMarker();
        ~VisualMarker();

    // 生成颜色
    std_msgs::ColorRGBA GenRGBAColor(float r, float g, float b, float a);
    // 生成颜色 - 蓝色
    std_msgs::ColorRGBA BlueColor();
    // 生成颜色 - 绿色
    std_msgs::ColorRGBA GreenColor();
    // 生成颜色 - 红色
    std_msgs::ColorRGBA RedColor();
    // 生成颜色 - 黄色
    std_msgs::ColorRGBA YellowColor();
    // 生成颜色 - 白色
    std_msgs::ColorRGBA WhiteColor();
    // 生成颜色 - 黑色
    std_msgs::ColorRGBA BlackColor();
    // 生成颜色 - 灰色
    std_msgs::ColorRGBA GrayColor();
    // 生成尺寸
    geometry_msgs::Vector3 GenScale(float x, float y, float z);
    // 生成默认尺寸
    geometry_msgs::Vector3 DefaultScale();
    // 生成线段列表
    visualization_msgs::Marker GenLineList(string ns, string frame_id, std_msgs::ColorRGBA color, 
        geometry_msgs::Point start, geometry_msgs::Point end);
    // 生成线段列表 points需要为偶数个
    visualization_msgs::Marker GenLineList(string ns, string frame_id, std_msgs::ColorRGBA color, 
        vector<geometry_msgs::Point> points);
    // 生成圆
    visualization_msgs::Marker GenCircle(string ns, string frame_id, std_msgs::ColorRGBA color, 
        float radius, geometry_msgs::Point center);
    // 生成多边形线段 points需要为偶数个
    visualization_msgs::Marker GenPolygonLine(string ns, string frame_id, std_msgs::ColorRGBA color, 
        vector<geometry_msgs::Point> points);       
    // 生成圆形点集
    visualization_msgs::Marker GenSphere(string ns, string frame_id, std_msgs::ColorRGBA color, 
        geometry_msgs::Point center_point);
    // 生成文字
    visualization_msgs::Marker GenText(string ns, string frame_id, std_msgs::ColorRGBA color, 
        geometry_msgs::Point center_point, string text);

    private:        
        
};

#endif